import axios from "axios"
import Cookies from 'js-cookie'
import router from "../router";
import Qs from "qs"
import store from "@/store";
import NProgress from 'nprogress' // 进度条
import 'nprogress/nprogress.css' // progress bar style
let baseURL = ''
let imgUrl = ''
// development开发环境 否则生产环境(上线)
if (process.env.NODE_ENV === 'development') {
  // baseURL = 'http://zxwyit.cn:8080/m.api'
  // imgUrl = 'http://zxwyit.cn:8080/upload/admin'
  baseURL = '/m.api'
  imgUrl = '/upload/admin'
} else {
  // baseURL = 'http:Admin.shopping/m.api'
  // imgUrl = 'http:Admin.shopping/upload/admin'
  baseURL = 'http://www.zxwyit.cn:8080/m.api'
  imgUrl = 'http://zxwyit.cn:8080/upload/admin'
}

//创建一个实例
const instance = axios.create({
  // baseURL,//请求路径
  headers: { 'content-type': 'application/x-www-form-urlencoded' }
})

// 添加请求拦截器
instance.interceptors.request.use(config => {
  NProgress.start()  //进度条开始
  // 在发送请求之前做些什么----给请求添加请求头token
  config.headers['AdminToken'] = Cookies.get("token")
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});

let requestType = ['_mt=create', '_mt=delete', '_mt=edit', '_mt=update']
// 添加响应拦截器
instance.interceptors.response.use(async res => {
  NProgress.done()  //进度条结束
  NProgress.configure({ showSpinner: false }) //去掉右侧加载圆圈
  // 对响应数据做点什么---根据后台返回的状态码来做一些处理
  let data = res.data
  let { errno, errmsg } = data
  let path = router.currentRoute.value.fullPath //获取当前路由路径
  if (10006 == errno) {  //token过期
    let configData = res.config.data || ''  //防止为空
    let index = requestType.findIndex(item => configData.includes(item))
    if (-1 == index) {  //正常过期返回登录页面
      ElMessage.error(errmsg)
      router.replace({ path: '/login', query: { path } })  //登录后需要跳回之前地址
      return
    } else {  //对需要无痛刷新操作
      let { username, password } = store._state.data.userInfo  //结构状态管理数据
      let logData = { _gp: "admin", _mt: "login", username, password }
      let { data, errmsg, errno } = await post(logData)  //这里需要同步获取请求
      if (200 == errno) {
        Cookies.set("token", data)
      } else {
        ElMessage.error(errmsg)
        router.replace({ path: '/login', query: { path } })  //登录后需要跳回之前地址
        return Promise.reject({ errno, errmsg, data })
      }
    }
    // 重新发送上一次请求
    return instance.request(res.config)
  }
  return data;
}, function (error) {
  // 对响应错误做点什么
  return Promise.reject(error);
});

function get(params) {
  return instance.get(baseURL, { params })
}

function post(data, params) {
  return instance.post(baseURL, Qs.stringify(data), { params })
}

// 上传
function upload(url, data) {
  return instance.post(url, data)
}

export {
  get,
  post,
  imgUrl,
  upload
}